Expand description
§Two Dimensional Grid
Continuous growable 2D data structure.
The purpose of this crate is to provide an universal data structure that is faster,
uses less memory, and is easier to use than a naive Vec<Vec<T>>
solution.
This crate will always provide a 2D data structure. If you need three or more dimensions take a look at the
ndarray library. The grid
crate is a container for all kind of data.
If you need to perform matrix operations, you are better off with a linear algebra lib, such as
cgmath or nalgebra.
No other dependencies except for the std lib are used.
Most of the functions std::Vec<T>
offer are also implemented in grid
and slightly modified for a 2D data object.
§Memory layout
Similar to C-like arrays, grid
uses a flat 1D Vec<T>
data structure to have a continuous
memory data layout. See also this
explanation of why you should probably use a one-dimensional array approach.
Note that this crate uses a row-major memory layout by default.
If you need a specific memory layout, please seek the *_with_order
constructors. You should also take note that some transformation methods
change the internal memory layout, like transpose
.
This choice is important, because operations on rows are faster with a row-major memory layout. Likewise, operations on columns are faster with column-major memory layout.
§Examples
use grid::*;
let mut grid = grid![[1,2,3]
[4,5,6]];
assert_eq!(grid, Grid::from_vec(vec![1,2,3,4,5,6],3));
assert_eq!(grid.get(0, 2), Some(&3));
assert_eq!(grid[(1, 1)], 5);
assert_eq!(grid.size(), (2, 3));
grid.push_row(vec![7,8,9]);
assert_eq!(grid, grid![[1,2,3][4,5,6][7,8,9]])
Macros§
- Init a grid with values.
- Init a column-major grid with values.
Structs§
- Stores elements of a certain type in a 2D grid structure.
Enums§
- Define the internal memory layout of the grid.